import os


def write_bin_file(file_path: str, data: bytes) -> None:
    """写入二进制文件"""
    try:
        with open(file_path, 'wb') as f:
            f.write(data)
        print(f"二进制文件写入成功：{file_path}")
    except IOError as e:
        print(f"写入失败：{e}")


def read_bin_file(file_path: str) -> bytes or None:
    """读取二进制文件，返回bytes数据"""
    try:
        with open(file_path, 'rb') as f:
            # 读取全部内容（也可指定size：f.read(1024)读取1024字节）
            data = f.read()
        print(f"二进制文件读取成功：{file_path}（大小：{len(data)}字节）")
        return data
    except IOError as e:
        print(f"读取失败：{e}")
        return None


def modify_bin_file(file_path: str, offset: int, new_data: bytes) -> None:
    """修改二进制文件的指定位置（偏移量）数据"""
    if not os.path.exists(file_path):
        print(f"文件不存在：{file_path}")
        return

    try:
        with open(file_path, 'r+b') as f:  # r+b：读写二进制模式
            f.seek(offset)  # 移动到指定偏移量位置
            f.write(new_data)  # 覆盖写入新数据
        print(f"二进制文件修改成功：{file_path}（偏移量：{offset}）")
    except IOError as e:
        print(f"修改失败：{e}")


# 使用示例
if __name__ == "__main__":
    bin_file = "C:\\Users\\latefly\\Desktop\\Plateform\\App.bin"

    # 1. 准备二进制数据（示例：0x00到0x0F的字节）
    original_data = bytes(range(24))  # b'\x00\x01\x02...\x0f'
    print("原始数据：", original_data.hex())  # 以十六进制显示

    # 2. 写入二进制文件
    write_bin_file(bin_file, original_data)

    # 3. 读取二进制文件
    read_data = read_bin_file(bin_file)
    if read_data:
        print("读取的数据：", read_data.hex())

    # 4. 修改二进制文件（在偏移量0x05处写入0xFF 0xEE）
    modify_bin_file(bin_file, offset=5, new_data=b'\xff\xee')

    # 5. 验证修改结果
    modified_data = read_bin_file(bin_file)
    if modified_data:
        print("修改后的数据：", modified_data.hex())
